package com.herench.bs.agent;

import java.util.List;
import java.util.Map;

/**
 * 住院业务类
 * Created by liuxiaohui on 2019/3/26.
 */
public interface IInHosAgent {

    /**
     * 提取患者基本信息：GetPatient()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证号码
     * @param outpOrInp 门诊住院标志（0:门诊、1:住院、默认：0）
     * @return 患者基本信息
     */
    Map<String, Object> getPatientInHos(String channelCode, String hospitalCode, String idNo, String outpOrInp) throws Exception;

    /**
     * 修改住院患者基本信息：UpdateInpPatient ()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @param name 姓名
     * @param sex 性别，中文（男、女）
     * @param dateOfBirth 出生日期
     * @param birthPlace 出生地
     * @param mailingAddress 户口地址
     * @param currentAddress 现住址
     * @param zipCode 邮政编码
     * @param nativePlace 籍贯
     * @param phoneNumberHome 联系电话
     * @param citizenship 国籍
     * @param nation 民族
     * @param insurCardNo 医保卡号
     * @param serviceAgency 工作单位
     * @param nextOfKin 联系人姓名
     * @param relationship 与联系人关系
     * @param nextOfKinPhone 联系人电话
     * @param nextOfKinAddr 联系人地址
     * @param nextOfKinZipCode 联系人邮政编码
     * @param maritalStatus 婚姻状况
     * @return
     */
    Map<String, Object> updateInpPatient(String channelCode, String hospitalCode, String idNo, String patientId, String name, String sex, String dateOfBirth, String birthPlace, String mailingAddress, String currentAddress, String zipCode, String nativePlace, String phoneNumberHome, String citizenship, String nation, String insurCardNo, String serviceAgency, String nextOfKin, String relationship, String nextOfKinPhone, String nextOfKinAddr, String nextOfKinZipCode, String maritalStatus) throws Exception;



    /**
     * 获取患者住院清单汇总信息：GetInHosBillCollect ()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param patientId 患者ID
     * @param idNo 身份证号
     * @param visitId 住院次数
     * @return
     */
    Map<String, Object> getInHosBillCollect(String channelCode, String hospitalCode, String patientId, String idNo, String visitId) throws Exception;

    /**
     * 患者入院申请查询：GetAppointsInHos ()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return
     */
    Map<String, Object> getAppointsInHos(String channelCode, String hospitalCode, String idNo, String patientId, String startDate, String endDate) throws Exception;

    /**
     * 患者入院申请取消：DoCancelAppointInHos ()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证
     * @param patientId 患者ID
     * @param hosAppId 入院申请ID
     * @param wxUserMobile 微信公众号注册手机号：微信消息推送用
     * @param patientName 患者姓名：微信消息推送用
     * @param appointmentTime 预约时间：微信消息推送用
     * @return
     */
    Map<String, Object> doCancelAppointInHos(String channelCode, String hospitalCode, String idNo, String patientId, String hosAppId, String wxUserMobile, String patientName, String appointmentTime) throws Exception;

    /**
     * 患者提交入院申请：DoAppointInHos ()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param patientId 患者ID
     * @param visitId 入院次数
     * @param patientName 患者姓名
     * @param sex 性别
     * @param birthDate 出生日期
     * @param idNo 身份证号
     * @param zipCode 邮政编码
     * @param phoneNumber 联系电话
     * @param patientClass 入院方式
     * @param patAdmCondition 入院病情
     * @param admissionCause 入院目的
     * @param prepayment 押金金额
     * @param deptAddmissionTo 入院科室编码
     * @param clinicDiagnosis 门诊诊断
     * @param clinicId 门诊号
     * @param appInHosRequireId 预约入院个性需求ID
     * @param appInHosRequireOptionSeq 预约入院个性需求选项序
     * @return
     */
    Map<String, Object> doAppointInHos(String channelCode, String hospitalCode, String patientId, String visitId, String patientName, String sex, String birthDate, String idNo, String zipCode, String phoneNumber, String patientClass, String patAdmCondition, String admissionCause, String prepayment, String deptAddmissionTo, String clinicDiagnosis, String clinicId, String appInHosRequireId, String appInHosRequireOptionSeq) throws Exception;

    /**
     * 获取患者入院通知单：GetInpNotice  ()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param patientId 患者ID
     * @param idNo 身份证号
     * @return
     */
    Map<String, Object> getInpNotice(String channelCode, String hospitalCode, String patientId, String idNo) throws Exception;

    /**
     * 患者入院申请审核：VerifyAppointInHos  ()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @param hosAppId 入院申请ID
     * @param admissionDate 预计入院日期
     * @param bedNo 预计入院床位号
     * @return
     */
    Map<String, Object> verifyAppointInHos(String channelCode, String hospitalCode, String idNo, String patientId, String hosAppId, String admissionDate, String bedNo) throws Exception;


    /**
     * 患者入院办理：CheckInHos()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @param hosAppId 入院申请ID
     * @return
     */
    Map<String, Object> checkInHos(String channelCode, String hospitalCode, String idNo, String patientId, String hosAppId) throws Exception;

    /**
     * 开具电子住院证：CreateInpNotice()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @param visitId 入院次数
     * @param week 住院周数
     * @param drugUser 是否使用药品
     * @param operation 手术种类
     * @param prepayment 预交金金额
     * @param enterDate 开证时间
     * @param serviceAgency 工作单位
     * @param patAdmCondition 入院病情
     * @param noticeDoctorEmp 开证医生工号
     * @param validityDate 有效日期
     * @param inDept 入院科室编码
     * @param clinicDiagnosis 门诊诊断
     * @param phoneNumber 联系电话
     * @param currentAddr 现住
     * @param isJz 是否急诊
     * @return
     */
    Map<String, Object> createInpNotice(String channelCode, String hospitalCode, String idNo, String patientId, String visitId, String week, String drugUser, String operation, String prepayment, String enterDate, String serviceAgency, String patAdmCondition, String noticeDoctorEmp, String validityDate, String inDept, String clinicDiagnosis, String phoneNumber, String currentAddr, String isJz) throws Exception;

    /**
     * 患者入院申请修改：UpdateAppointInHos()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @param hosAppId 入院申请ID
     * @param appInHosRequireId 预约入院个性需求ID
     * @param appInHosRequireOptionSeq 预约入院个性需求选项序号
     * @return
     */
    Map<String, Object> updateAppointInHos(String channelCode, String hospitalCode, String idNo, String patientId, String hosAppId, String appInHosRequireId, String appInHosRequireOptionSeq) throws Exception;

    /**
     * 获取住院进度当前步骤信息：GetHosScheduleCurrentInfo()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @param visitId 住院次数
     * @param hosScheduleType 进度类型
     * @return
     */
    Map<String, Object> getHosScheduleCurrentInfo(String channelCode, String hospitalCode, String idNo, String patientId, String visitId, String hosScheduleType) throws Exception;

    /**
     * 获取住院进度详细信息：GetHosScheduleDetail()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @param visitId 住院次数
     * @param hosScheduleType 进度类型
     * @param medAppId 病历复印预约ID
     * @return
     */
    Map<String, Object> getHosScheduleDetail(String channelCode, String hospitalCode, String idNo, String patientId, String visitId, String hosScheduleType, String medAppId) throws Exception;

    /**
     * 获取预约住院申请个性需求：GetAppInHosRequire()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @return
     */
    Map<String, Object> getAppInHosRequire(String channelCode, String hospitalCode) throws Exception;


    /**
     * 获取患者住院每日清单列表(PDF版)：GetDailyBillDetailPDF()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @param visitId 住院次数
     * @return
     */
    Map<String, Object> getDailyBillDetailPDF(String channelCode, String hospitalCode, String idNo, String patientId, String visitId) throws Exception;

    /**
     * 获取患者住院末次住院信息：GetPatInHos()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @return
     */
    Map<String, Object> getPatInHos(String channelCode, String hospitalCode, String idNo, String patientId) throws Exception;


    /**
     * 获取患者住院结算信息：GetInpSettleInfo()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param patientId 患者ID
     * @param visitId 住院次数
     * @return
     */
    Map<String, Object> getInpSettleInfo(String channelCode, String hospitalCode, String patientId, String visitId) throws Exception;

    /**
     * 获取病历套餐：GetMedPlanDict()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @return
     */
    Map<String, Object> getMedPlanDict(String channelCode, String hospitalCode) throws Exception;


    /**
     * 获取患者病历复印费用：GetMedPrintFee()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param inpNo 住院
     * @param visitId 入院次数
     * @param medPlanCode 病例套餐编码
     * @return
     */
    Map<String, Object> getMedPrintFee(String channelCode, String hospitalCode, String inpNo, String visitId, String medPlanCode) throws Exception;


    /**
     * 复印病历预约：DoAppointMedPrint()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param inpNo 住院号
     * @param visitId 入院次数
     * @param patientName 患者姓名
     * @param sex 性别
     * @param idNo 身份证号
     * @param idCardFrontImage 患者身份证正面照片数据流
     * @param idCardBehindImage 患者身份证背面照片数据流
     * @param agentName 代办人姓名
     * @param agentRelationship 代办人与患者关系
     * @param agentIdNo 代办人身份证号
     * @param agentIdCardFrontImage 代办人身份证正面照片数据流
     * @param agentIdCardBehindImage 代办人身份证背面照片数据流
     * @param agentPhoneNumber 代办人电话
     * @param medClass 病历类型
     * @param medPlanCode 病历套餐编码(复印用途)
     * @param printPurposeDesc 复印用途描述
     * @param printNum 复印份数
     * @param memo 备注
     * @param postWay 领取方式
     * @param payWay 支付方式
     * @param recipientName 收件人姓名
     * @param relationship 收件人与患者关系
     * @param postAddr 收件地址
     * @param recipientPhoneNumber 收件人电话
     * @param wxUserMobile 微信公众号注册手机号：微信消息推送用
     * @return
     */
    Map<String, Object> doAppointMedPrint(String channelCode, String hospitalCode, String inpNo, String visitId, String patientName, String sex, String idNo, String idCardFrontImage, String idCardBehindImage, String agentName, String agentRelationship, String agentIdNo, String agentIdCardFrontImage, String agentIdCardBehindImage, String agentPhoneNumber, String medClass, String medPlanCode, String printPurposeDesc, String printNum, String memo, String postWay, String payWay, String recipientName, String relationship, String postAddr, String recipientPhoneNumber, String wxUserMobile) throws Exception;



    /**
     * 复印病历预约取消：DoCancelAppointMedPrint()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param medAppId 复印病历预约ID
     * @param inpNo 住院号
     * @param visitId 入院次数
     * @param patientName 患者姓名
     * @param sex 性别
     * @param idNo 身份证号
     * @param wxUserMobile 微信公众号注册手机号：微信消息推送用
     * @param appointmentTime 预约时间：微信消息推送用
     * @return
     */
    Map<String, Object> doCancelAppointMedPrint(String channelCode, String hospitalCode, String medAppId, String inpNo, String visitId, String patientName, String sex, String idNo, String wxUserMobile, String appointmentTime) throws Exception;




    /**
     * 复印病历预约查询：GetAppointMedPrint()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param idNo 身份证号
     * @param inpNo 住院号
     * @param visitId 住院次数
     * @param patientName 患者姓名
     * @param patientId 患者ID
     * @param recipientName 收件人姓名
     * @param recipientPhoneNumber 收件人电话
     * @param appointStatus 预约状态
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return
     */
    Map<String, Object> getAppointMedPrint(String channelCode, String hospitalCode, String idNo, String inpNo, String visitId, String patientName, String patientId, String recipientName, String recipientPhoneNumber, String appointStatus, String startDate, String endDate) throws Exception;


    /**
     * 复印病历预约缴费：ChargeAppointMedPrint   ()
     *
     * @param channelCode 系统编码：微信前端区分医院用
     * @param hospitalCode 医院代码：微信后端区分医院用
     * @param medAppId 复印病例预约I
     * @param cardNo 卡号
     * @param cardType 卡类型
     * @param moneyType 支付类别
     * @param streamNo 流水号
     * @param batchCode 批次号
     * @param authorizationCode 授权码
     * @param terminalNumber 终端编号
     * @param bankCode 银行编码
     * @param bankName 银行名称
     * @param reference 参考号
     * @return
     */
    Map<String, Object> chargeAppointMedPrint(String channelCode, String hospitalCode, String medAppId, String cardNo, String cardType, String moneyType, String streamNo, String batchCode, String authorizationCode, String terminalNumber, String bankCode, String bankName, String reference) throws Exception;

    /**
     * 获取患者预交金缴费记录： GetPrePayments()
     *
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @param visitId 住院次数
     * @param rcptNo 内部交易号
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return
     */
    Map<String, Object> getPrePayments(String channelCode, String hospitalCode, String idNo, String patientId, String visitId, String rcptNo, String startDate, String endDate) throws Exception;


    /**
     * 患者预交金缴纳： DoPrePayments()
     *
     * @param patientId 患者ID
     * @param visitId 住院次数
     * @param amount 缴费金额
     * @param payWay 缴费方式
     * @param transactType 交易类型
     * @param idNo 身份证号
     * @param winNo 窗口号
     * @param cardNo 卡号
     * @param cardType 卡类型
     * @param tranNo 合同号
     * @param moneyType 支付类别
     * @param streamNo 流水号
     * @param batchCode 批次号
     * @param authorizationCode 授权码
     * @param terminalNumber 终端编号
     * @param bankCode 银行编码
     * @param bankName 银行名称
     * @param reference 参考号
     * @param wxUserMobile 微信公众号注册手机号：微信消息推送用
     * @param patientName 患者姓名：微信消息推送用
     * @param inpNo 住院号：微信消息推送用
     * @return
     */
    Map<String, Object> doPrePayments(String channelCode, String hospitalCode, String patientId, String visitId, String amount, String payWay, String transactType, String idNo, String winNo, String cardNo, String cardType, String tranNo, String moneyType, String streamNo, String batchCode, String authorizationCode, String terminalNumber, String bankCode, String bankName, String reference, String wxUserMobile, String patientName, String inpNo) throws Exception;


    /**
     * 有床通知患者确认： ConfirmAppointBedInfo()
     *
     * @param idNo 身份证号
     * @param hosAppId 入院申请ID
     * @return
     */
    Map<String, Object> confirmAppointBedInfo(String channelCode, String hospitalCode, String idNo, String hosAppId) throws Exception;

    /**
     * 获取患者住院费用清单： GetHosBill()
     *
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @param visitId 住院次数
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return
     */
    Map<String, Object> getHosBill(String channelCode, String hospitalCode, String idNo, String patientId, String visitId, String startDate, String endDate) throws Exception;

    /**
     * 获取患者住院详细信息： GetPatAllInHos()
     *
     * @param idNo 身份证号
     * @param patientId 患者ID
     * @param visitId 住院标识
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return
     */
    Map<String, Object> getPatAllInHos(String channelCode, String hospitalCode, String idNo, String patientId, String visitId, String startDate, String endDate) throws Exception;


    /**
     * 有床通知患者确认： ConfirmAppointBedInfo()
     *
     * @param idNo 身份证号
     * @param inpNo 住院号
     * @param visitId 住院次数
     * @param settleRefundType 患者确认结算退款方式
     * @param settleRefundCardNo 患者确认结算退款卡号
     * @param settleRefundAmount 患者确认结算退款金额
     * @return
     */
    Map<String, Object> confirmSettleInfo(String channelCode, String hospitalCode, String idNo, String inpNo, String visitId, String settleRefundType, String settleRefundCardNo, String settleRefundAmount) throws Exception;



}
